一种让你的手机更好的运行Linux发行版的解决方案

您所在的位置:网站首页 linux arm发行版 一种让你的手机更好的运行Linux发行版的解决方案

一种让你的手机更好的运行Linux发行版的解决方案

2022-05-28 00:45| 来源: 网络整理| 查看: 265

前言

本文中的这种解决方案源于我的一个私人项目的子方案,测试了一些手机之后发现达到了预期的目标,我个人的觉得几乎是最好的将手机改造成Linux服务器的方案了。

首先,类似的解决方案,基本都是在安卓设备上运行一个虚拟机或者容器或者想办法连接到内核,装一个Linux的发行版,虽然我对于这方面的知识完全不了解,但是根据我实际的体验看,这种方案只适用于,我想用的主力机上,随时随地的开启一个服务器,但是这个服务器不需要长期在线的情况。如果我想要把手机当成一个长期在线的服务器,有些不稳定,尤其是使用老设备时。

那么另一种方案就是直接在手机上刷进去一个Linux发行版,就不在手机操作系统上再加一层应用来运行Linux了。这种做法有两种解决方案,一类是如果你的设备可以有标准的UEFI启动方式,那么你几乎可以直接装上去任何一种主流的Linux发行版,它们基本上都提供ARM上的操作系统;如果没有UEFI的启动方式,就只能装一些专门为手机设计的发行版了。关于各类手机的启动方式,实际上是有一些SoC可以刷进去一个类似于伪UEFI,但是我没有测试过。一般这种SoC都是因为他们不止用于手机,而是有更广泛的应用,有对应的开发板,所以才会有第三方做一个伪UEFI出来。

除了上述的方案,就是使用PostmarketOS、Mobian或者Ubuntu Touch。但是,从我的需求出发,我觉得安卓系统已经足够我的手机作为一部手机使用了,所以我真的没有必要为了使用手机去刷这些发行版(我觉得可能这就是它们的发展非常缓慢而且不被人关注的原因吧,方向错了)。如果想要作为一台长期在线的服务器使用,那PostmarketOS(后面简称pmos)是最合适的。从安装OS到如何提高可用性,以及在安装过程中的遇到的一些作为纯纯的小白完全不知道怎么解决(比如我这种完全不懂的)的问题,我都会在下面的部分写出来。

本文的大部分资料都源于官方的Wiki,建议一定要参考Wiki,但是我个人使用的感觉是Wiki没有随着版本更新,有些不好用。而且网上的资料极少,社区也不够健全。

实现的目标

如果你对于你的服务器要求是这样的:

l 预算低于500元

l 没有GPU计算需求

l IO需求不高

l 低噪音低功耗

l 长时间在线,易于批量维护

那么我觉得这个解决方案非常适合你。比如,你想要长期在内网在线一个游戏的服务器,这种需求,都很合适。但是,如果你对于网络要求是在公网上,除非你能轻松拿到公网的一个访问方式,比如专门租一个服务器做中转,高算力在本地网络,那么我很建议你直接租一个略好的云服务器,尤其是你有学生优惠的时候;如果你有超过500元的预算,并且对噪声功耗没什么要求,建议直接买一个二手的刀片服务器,一整套一千以内就能拿下一台足够你折腾的。(一般服务器的二手配件都很稳定,店家也都会有保修而且不会跑路而且价格不高)

比较适合的应用,我能想到的就几个,一台低功耗实时在线的内网服务器,运行一些游戏服务端、网络性能不高的软路由、低速的NAS、完成需要长时间在线的任务;移动的Linux服务器,比如一些应急的边缘计算场景,或者跑一些游戏(我不知道OpenGL的支持是不是完整,可能GPU的驱动非常糟糕,如果可以的话装一个Steam就可以玩很多游戏,没有试过)

硬件需求

首先,原则上,你应该是要在一个ARM设备上跑这个系统,虽然在x86上也能跑(以前Intel曾经出过一些x86设备对抗ARM,然后失败了),但是就没有那么值得了。我个人的建议是AArch64的设备,最好是高通或三星的SoC,最好是小米设备。因为,三星和小米很多东西都是开源的,支持的非常好,其他厂商似乎并不是很乐意放出来各种源码。高通的SoC支持的也很好是因为使用这个发行版的人大部分都是外国人,而且如果仔细查阅资料,那些有良好支持的SoC全都有开发板。

如果你对于你的设备可不可以使用还是确定,可以查一下你的设备是不是被官方支持了,这个在Wiki里有写,只要在Testing里就可以使用。另外,官方有一个表,我比较推荐的里面AArch64的SoC,如果你的设备是支持的,那就可以装。原则上,你的设备必须要被官方支持,否则安装会非常复杂,不推荐。

支持较好的SoC

当然了,如果是太新的设备,就超了预算,所以我比较推荐的SoC是高通骁龙410、450、625、630、810、820、835、845(以及他们的超频版本),如果你是使用和我一样把手机拆掉只剩主板的话,发热可以完全不考虑,性能参考就是,CPU核心越高级、核心数量越多、制程越低、频率越高、支持的内存频率越高的,性能越好。具体的核心规格可以查阅资料。因为散热的因素被去除了,只有功耗限制的问题,所以在安卓上跑的测试分数并不能完全作为参考,具体的性能差异,我并没有全部做过测试(如果你愿意赞助我的话,我倒是很乐意全都做一遍)。

确定好你的SoC之后,就去找对应的手机,然后看看官方是不是支持这个设备,如果支持,那就是最方便的了,因为这些SoC都支持主线内核,功能完整,基本上一路下一步就可以安装上;如果你想买或者你已经有的设备不在官方的支持设备列表里,但是使用的是推荐的这些SoC中,那么你得自己找对应的Kernel编译一遍才能使用,这个Kernel的找法就是看看别的开源OS里面,是不是提供和你的机型相同的系统,里面会带Kernel,把这个别人写好的Kernel提出来编译一遍再放到pmOS里面就行了(具体的我没有试过,官方有一个教程)。不过,因为有主线内核,所以这些SoC即便是新机型也非常好找Kernel。其他的SoC,比如国内比较多的联发科的MTXXXX,支持的并不是很好,但是到了天玑系列就逐步有支持了,只不过还是那个问题,超预算了,不如直接买刀片服务器。

另外需要注意的是,因为很多国内手机品牌,在海外只有高通版本的手机,所以官方说支持的机型,其实是支持的那个机型的高通版本,这个一定要甄别仔细。在官方的对应手机型号的页面里面看到SoC到底是哪个,再去买对应的手机版本。

确定好机型之后,你的手机其实屏幕和电池都不太重要,其实最后只要主板部分就够了,所以如果你想进一步节约成本,可以从这方面考虑。

如果你想要提高性能,是可以像树莓派一样组成计算集群的,而且如果手机有usb3.0的接口或者通过WIFI通讯,IO是够的,但是我根据实际的使用体验,其能耗比略低于x86,只不过如果真的都是买的二手设备,性价比是拉满的,比使用x86要便宜很多。这个部分我会在最后一章略微展开说一下。如果要和那种树莓派比较,我只能说用树莓派组一个所谓的HPC有些过于“玩具”,大部分演示的功能也都是给中小学生做动手编程兴趣班上讲的内容。

安装系统

首先,你需要一个Linux环境,我建议是Ubuntu,别的发行版我没有试过,如果你是使用虚拟机,我只使用过VMware,VBox似乎也可以但是没测试过,Hyper-V和WSL都不推荐。之后要在Linux系统中安装pmos官方的一个安装器(其实貌似没有这个也可以,但是官方只说了不用这个安装器也可以,没有说要怎么做,所以建议就用这个安装器),安装方法可以参考官方文档。

这里概况一下安装这个安装器的方法,就是先安装Python3.6以上的版本,然后用pip安装pmbootstrap。

装好安装器之后,完全按照官方Wiki的内容执行就可以了,几乎不会遇到太多问题。如果有某个阶段一直运行,大概率是网络问题,解决方案想必都懂,如果你的解决方案只能在Windows环境下运行,可以开放代理服务器的端口,然后在你的Linux环境中设置代理服务器为你的Windows上运行的代理服务器。

但是,众所周知如果只给一份英文文档,就算文档写的再好,就算英语从小学就开始学,大部分人见到英文文档腿都软了,所以这里还是概括性的给出了我的安装流程,顺便把坑都说一下。

首先第一个坑就是网络问题,我建议换成国内的源,我这里使用的清华的镜像,就是在官方给出的指令的前提下,加上参数:

例如:

因为篇幅问题,我在下面的就不再重复添加这一指令了,如果各位复制的时候记得要都加上这两个更换源的指令。

首先,更新pmos的内容:

然后初始化:

这个过程会问你很多问题,按照问你的内容填写就行了,但是有几个选项会让人很懵,我这里重点说一下。首先问你工作目录,这个用默认的就行(如果你涉及到大批量、多种设备的情况,请自行修改);之后问你安装什么版本,选择edge,也就是最新的,不建议选稳定版,因为支持的设备有限。

之后选择机型,这里只要Wiki上有都会支持,如果你选不到你的设备,就属于新建设备了,我没有试过,建议回到上面介绍如果你的设备不被支持的情况,要如何使用pmos,如果你已经卖了二手设备但是发现这里没有你的型号,那么说明你没有好好看上面的内容啊。

下面有的机型会问你选择什么kernel,优先选择主线,也就是mainline,我实际测试时,下游内核(downstream kernel)的性能释放更加充分(测试中性能高50%),其实可能就是把功耗限制改了,主线内核的性能更加保守,我不知道在别的SoC上是什么情况。但是下游内核的功能明显不完整,被阉割的很严重,有些SoC的下游内核连WIFI都不支持。所以如果你不想折腾,建议直接选择主线内核。

后面的内容都选择默认,有两个比较特殊,一个是Username,建议,你自己输入一个你想要设置的用户名。使用的GUI,我建议如果你想有个GUI,那就选一个你喜欢的GUI,如果你只是想有个命令行,建议选fbkeyboard或者console,none也可以,但是很多东西不会顺便设置好,用起来就得手动设置。如果你使用的是下游内核,这里的桌面很多都用不了(应该是OpenGL的问题,所以我很推荐使用主线内核,这样装steam当个掌机完全有可能吧应该)。

下面还会遇到一个要预装的包,这个随你的想法预装即可。

 别的全部都是默认即可,也就是直接回车。

下一步生成安装镜像:

这里也支持卡刷:

详细的卡刷方法,官方也有介绍,这个我没有试过,就不赘述了,不推荐,除非这种方式适合你的大规模部署OS。

这个步骤会让你设置密码,第一遍输入密码,第二遍重复密码。

最后一步是刷入镜像,首先你得在此之前确定你的手机解锁BL了,也就是可以刷机了,这一步网上的教程太多了,不再赘述,然后进入fastboot模式,开始刷机:

然后启动:

这个启动只是临时的,如果你关机之后使用电源键开机,就不会进入系统,主要是测试你的手机是不是能正常运行,如果测试无误,再进入到fastboot模式,执行:

这样使用电源键开机就可以直接进入系统了。要注意请务必先使用boot测试,否则如果不支持你的设备,你误安装了,会让你的手机变砖(不知道是不是所有都会,至少我成功变砖了,大概率是因为这个原因)。只要boot启动之后没问题,再flash_kernel就可以运行(至少我没遇到过有问题的,这里不保证适用于所有设备)

如果你在安装过程中遇到一些找不到XXX的问题,请删除你设置的pm工作目录,这样就可以完全重新来一遍了。遇到莫名其妙的问题,主要是因为使用的代码是随时在更新的,所以可能这次可以,下次不可以,源码很不稳定,尤其是Kernel的源码。官方给了一堆解决方案,我觉得完全没用,唯一的办法就是删掉所有pm的工作目录,重新来一遍。

使用系统

在Linux环境中用ssh连接172.16.42.1,一般默认都是这个ip,实际上你启动系统之后会告诉你如何连接装好的系统,复制过去运行即可。不会用ssh的话,请自行百度,真的很简单。

pmos基于Arch Linux,可能在一个人均Ubuntu的年代,大部分人不熟悉这个发行版。不过在网上搜资料还是挺多的,只要你用的是主线内核,你查的Arch Linux下使用方法都能用在pmos上。另外,它的包管理器是apk。

如果你想要连接网络,我建议使用WIFI,USB也可以直接上网,但是同样很不方便设置(我个人没有遇到过自动设置好的情况,但是网上其它所有教程都是说USB网卡即插即用)。WIFI设置:

$SSID是WIFI名,$PASSWORD是密码,替换掉,注意别把引号丢了。如果出现问题,请自己查nmcli的使用帮助。

你想要做什么功能,你就做就行了,似乎没有什么好讲的。这就是一台服务器。

从手机到服务器

如果你还想要你手机的便携性,那么无需改装。如果你想要进一步拉高性能。那么我的改装方案是这样的:

1. 拆屏幕和后壳,取出电池(有的机型必须要有电池才能过开机自检故不能取出)

2. 加散热器

3. 加USB拓展接口

如果你想把主板拆下来,搞一个像树莓派集群那样的大箱子,也是可以的,一般主板上也都有固定的孔。散热器的选择,只要买一些能压住10W功耗的被动散热就行了,很多嵌入式散热都用这些,很便宜(你可能要买很多才便宜,单买不够邮费钱)。另外,因为手机上的芯片高度不同,如果你想要最佳的散热方案,可能需要买一些硅胶垫片,让内存芯片也能被散热,这个就要你自己测量和设计了。如果你觉得被动散热不够,可以加一个风扇,或者组成集群之后,用一个12cm风扇吹。总之这部分完全可以参考树莓派的集群设计。

USB拓展,大部分都支持OTG,拓展出来网口是可以用的(我不知道是不是免驱动,没有钱买拓展口,拓展设备快比我的二手手机还贵)。设备的WIFI性能,我个人可以接受,但是速度肯定没有有线介质的网络稳定,我觉得这部分更多的在于你的路由器性能如何。

因为是ARM服务器,而且这些芯片都不是专门用于HPC的ARM芯片,所以经常会有offline的问题,这个如果散热足够好就可能可以解决,如果还不行,把cpufreq改成performance,这些资料在ARM的嵌入式设置资料中可以找到,更多更详细的介绍请自行百度。

其实到这一步,它的性能已经很强了,我实际测试中我用50元买来的高通骁652设备,运行我需要的算法时,性能已经达到了i5-10200H的30%,3900X的6.4%,整个系统的功耗是6.5W左右。虽然我不得不说,其实不管使用什么架构设计芯片,其实架构都不是决定芯片性能的主要因素,但是ARM这十年逐渐进入到大众的视野中,虽然它直到前几年还一直在宣传低功耗,但是对于针对手机设备设计的ARM芯片的性能潜力绝对是很高的。尤其是有些机型有大量的“工作室手机”,导致这种方案在我看来十分的高性价比,唯一的缺点就是IO性能的不足了,因为毕竟手机主板上不需要那么多IO接口。不过能不能改主板支持呢?我就没有研究了,毕竟我的需求已经够了。

如果你有什么问题,可以留言或者私信,我都会答复。未来我会出一个Q&A来给我的文章打一个补丁,也会有视频发出,毕竟不是所有人都喜欢看一篇干巴巴的文章。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3